import { defineStore } from "pinia";
import type { Todo } from "./models/todoModel";

export const useTodoStore = defineStore("todo", {
  state: (): Todo => {
    return {
      todoList: [],
    };
  },
  getters: {
    // 当现有数据（todoList）不能直接展示，需要做一些处理或计算才能展示，就使用计算属性
    // 已完成数量
    isDoneNum(state) {
      // reduce统计，求和，累加
      return state.todoList.reduce((previous, current, index, array) => {
        /*
          previous, 之前的值（上次循环函数调用的返回值，第一次为第二个参数的值：0）
          current, 当前遍历的元素（item）
          index, 当前遍历元素的下标
          array 整个遍历的数组
        */
        // return previous + (current.isDone ? 1 : 0);
        return previous + +current.isDone;
      }, 0);
    },
    // 总数
    totalNum(state) {
      return state.todoList.length;
    },
  },
  actions: {
    // 获取todoList
    getTodoList() {
      // 模拟发送请求，更新todoList数据
      // 因为需要发送请求，所以定义action
      setTimeout(() => {
        this.todoList = [
          {
            id: 1,
            name: "吃饭",
            isDone: false,
          },
          {
            id: 2,
            name: "睡觉",
            isDone: true,
          },
        ];
      }, 1000);
    },
  },
});
